<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <title>AJ MCP SDK/Working with Tools</title>
        <meta name="description" content="轻量级的 Java 8 Model Context Protocol (MCP) SDK. Working with Tools"/>
        <meta name="keywords" content="mcp, mcp sdk, java mcp, mcp client, mcp server, java8 mcp, Tools"/>
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <link rel="stylesheet" href="/asset/style/main.css"/>
        <link rel="icon" type="image/png" href="/asset/favicon.ico"/>
        <script src="/asset/common.js"></script>
    </head>
    <body>
        <nav>
            <div>
                <div class="links">
                    <a href="/">🏠 首页</a>
                    | ⚙️ 源码:
                    <a target="_blank" href="https://github.com/lightweight-component/aj-mcp">Github</a>/<a target="_blank" href="https://gitcode.com/lightweight-component/aj-mcp">Gitcode</a>
                    |
                    <a href="/">英文版本</a>
                </div>
                <h1>AJ MCP SDK</h1>
                <h3>用户手册</h3>
            </div>
        </nav>
        <div>
            <menu>
                
                <ul>
                    <li class="selected">
                        <a href="/cn">首页</a>
                    </li>
                    <li>
                        <a href="/architecture/index-cn">架构原理</a>
                    </li>
                </ul>
                <h3>MCP 客户端 SDK</h3>
                <ul>
                    <li>
                        <a href="/client/setup-client-cn">安装与配置</a>
                    </li>
                    <li>
                       <a href="/client/initialization-cn">初始化</a>
                    </li>
                    <li>
                       <a href="/client/resource-cn">Resources 用法</a>
                    </li>
                     <li>
                       <a href="/client/prompt-cn">Prompts 用法</a>
                    </li>
                     <li>
                       <a href="/client/tool-cn">Tools 用法</a>
                    </li>
                </ul>
                <h3>MCP 服务端 SDK</h3>
                <ul>
                      <li>
                           <a href="/server/usage-server-cn">Server SDK 用法指南</a>
                      </li>
                      <li>
                           <a href="/server/res-server-cn">Resources 用法</a>
                      </li>
                      <li>
                           <a href="/server/pro-server-cn">Prompts 用法</a>
                      </li>
                      <li>
                             <a href="/server/tool-server-cn">Tools 用法</a>
                       </li>
                      <li>
                         <a href="/server/sample-cn">整合例子</a>
                      </li>
                </ul>

                <h3>其他</h3>
                <ul>
                    <li><a href="/misc/versions">版本记录</a></li>
                    <li><a href="/misc/contact-cn">联系方式</a></li>
                </ul>
            </menu>
            <article>
                <h1>工具（Tool）使用指南</h1>
<p>AJ MCP 的工具系统提供了一种结构化方式，用于定义可被客户端发现和调用的函数。每个工具都有名称、描述和一个定义其输入参数的 JSON Schema。该工具系统旨在让大语言模型（LLM）能够轻松理解可用工具及其用法。</p>
<h2>列出工具</h2>
<p>列出所有可用工具：</p>
<pre><code class="language-java">List&lt;ToolItem&gt; tools = mcpClient.listTools();
assertEquals(7, tools.size());
</code></pre>
<p>此方法将跨多个页面获取所有的工具，并没有分页。如果你需要对分页进行更精细的控制，可以改用重载的<code>listTools(int pageNo)</code>方法。</p>
<pre><code class="language-java">List&lt;ToolItem&gt; tools = mcpClient.listTools(1);
assertEquals(3, tools.size());
</code></pre>
<h2>调用工具</h2>
<p>调用某个工具：</p>
<pre><code class="language-java">String toolExecutionResultString = mcpClient.callTool(&quot;echoString&quot;, &quot;{\&quot;input\&quot;: \&quot;hi\&quot;}&quot;);
assertEquals(&quot;hi&quot;, toolExecutionResultString);
</code></pre>
<p><code>callTool()</code> 方法返回一个 CallToolResult，包含工具的响应内容，可能是文本、图片或其他内容类型。</p>
<!--
对于支持进度通知的工具，可以在请求元数据中提供 ProgressToken，并注册通知处理器来接收进度更新。

## 通知处理

客户端可通过 OnNotification 方法接收来自服务器的通知：

client.OnNotification(func(notification mcp.JSONRPCNotification) {
    // 处理通知
    if notification.Method == "notifications/progress" {
        // 处理进度通知
    }
})

你可以注册多个通知处理器，按注册顺序依次调用。

详细通知处理机制请参阅通知处理文档。

## 错误处理

所有与服务器通信的客户端方法均可能返回错误，包括：

- 传输错误：传输层发生的问题
- 协议错误：服务器返回的错误
- 解析错误：解析响应时发生的错误

建议在每次客户端操作后检查错误：

result, err := client.SomeOperation(ctx, request)
if err != nil {
    // 处理错误
    return err
}
// 处理结果

-->
                <div id="comment-holder">
                </div>
            </article>
        </div>
        <footer>
             AJ-Util，开源框架 <a href="https://framework.ajaxjs.com" target="_blank">AJ-Framework</a> 的一部分。联系方式：
             frank@ajaxjs.com，<a href="https://blog.csdn.net/zhangxin09" target="_blank">作者博客</a>
             <br />
             <br />
             Copyright © 2025 Frank Cheung. All rights reserved.
         </footer>
    </body>
</html>